// 导入
const path = require('path');
const fs = require('fs');
const axios = require('axios');
// 创建路由
const router =  require('express').Router();
// 拼接文件路径
let city_path = path.resolve(__dirname,"../../public/data/city.json");
// 处理城市文件读取的promise实例
let pro = new Promise((resolve,reject)=>{
    // 读取文件
    fs.readFile(city_path,'utf-8',(err,text)=>{
        if(err){
            reject({
                code: -1,
                msg: '读取城市列表失败。'
            })
        }else {

            resolve({
                code: 200,
                // result: JSON.parse(text),
                result: JSON.parse(text).data
            })
        }
    })
})
// 读取city.json文件
class City {
    // 获取城市列表
    async getCityList(req,res){
        await pro.then(
            content => {
                res.send(content)
            }
        )
        .catch(
            err=>{
                res.send(err);
            }
        )
    }
    // 获取所有城市的首字母
    async getCityFirstCode(req,res){
        await pro.then(
            content => {
                let {result} = content;
                let arr = [];
                result.forEach(item=>{
                    arr.push(item.firstcode);
                })
                // 提取城市拼音首字母
                let codes = [... new Set(arr)];
                let arr2 = "ABCDEFGHIJKLMNOPQRSTUVWXZY".split("");
                let newArr = [];
                // 整合字母顺序
                for(let i = 0 ; i < arr2.length ; i ++){
                    for(let j = 0; j < codes.length ; j ++ ){
                        if(arr2[i]==codes[j]){
                            newArr.push(arr2[i]);
                            continue;
                        }
                    }   
                }
                // 响应排序完成的字母数据
                res.send({
                    code: 200,
                    result: newArr
                })
            }
        )
        .catch(
            err=>{
                res.send(err);
            }
        )
    }
    // 获取热门城市
    async getHotCityList(req,res){
        await pro.then(
            content => {
                let {result} = content;
                // 过滤数组
                let arr = result.filter(item=>{
                    // 保留符合条件的数据
                    return item.ishot == 1
                })
                res.send({
                    code: 200,
                    result: arr 
                })
            }
        )
        .catch(
            err=>{
                res.send(err);
            }
        )
    }
    // 测试ip定位
    async getLocation(req,res){
        let ip = req.query.ip || '111.206.214.37';// 默认北京
        // 注册账号地址：https://lbsyun.baidu.com/
        // let ak = '填写你的ak';
        let ak =req.query.ak || '';
        await axios.get(`https://api.map.baidu.com/location/ip?ip=${ip}&coor=bd09ll&ak=${ak}`)
        .then(
            response=>{
                let data = response.data;
                res.send({
                    code: 200,
                    msg: '获取定位成功。',
                    data
                })
            }
        )
        .catch(
            err =>{
                res.send({
                    code: -1,
                    msg: '获取定位失败。'
                })
            }
        )
    }
}

// 创建城市实例
let city = new City()

// 分发请求
router.get('/list',async (req,res)=>{
    // 获取城市列表
    await city.getCityList(req,res)
})
router.get('/firstcode',async (req,res)=>{
    // 获取城市列表
    await city.getCityFirstCode(req,res)
})
router.get('/hot',async (req,res)=>{
    // 获取城市列表
    await city.getHotCityList(req,res)
})

// https://ip.900cha.com/
// 示例： http://localhost:3000/city/location?ip=113.66.97.192
router.get('/location', async (req,res)=>{
    // 定位（测试）
    await city.getLocation(req,res);
})
// 暴露路由
module.exports = router;